/*
 * @Author       : wfl
 * @LastEditors  : wfl
 * @description  :
 * @updateInfo   :
 * @Date         : 2023-03-02 09:54:42
 * @LastEditTime : 2023-10-16 11:07:45
 */
import type { App } from 'vue'
import useSettingsStore from '@g/store/modules/settings'
import { dayjs, ikStore } from 'iking-utils'

export default function errorLog(app: App) {
  const settingsStore = useSettingsStore()
  if (import.meta.env.MODE !== 'development' && settingsStore.settings.app.enableErrorLog) {
    // 由于 errorHandler 拦截错误，如果不进行手动输出，在开发者工具里将看不到任何错误提示
    // 所以默认在开发环境强制关闭该功能
    app.config.errorHandler = (err, vm, info) => {
      // 在此处编写错误上报代码
      // 以下代码为示例代码
      const log = {
        url: location.href,
        err: {
          message: (err as any).message,
          stack: (err as any).stack
        },
        info,
        datetime: dayjs().format('YYYY-MM-DD HH:mm:ss')
      }
      ikStore.session.setItem('errorLog', JSON.stringify(log))
    }
  }

  app.config.errorHandler = (err, vm, info) => {
    if (vm?.$el?.nodeName !== 'IKSVG')
      console.error('[Iking Error Handler]:', err, vm, info)
  }

  app.config.warnHandler = function () {
    // console.warn('[Iking Warning Handler]: ', msg)
    // 屏蔽所有警告消息
  }
}
